Virtual computing environments allow multiple virtual machines (VMs) to be run on a single physical platform and to share physical resources. In some virtual computing environments, VMs may be dedicated to executing a runtime environment that provides an application execution framework isolated from the underlying system. The Java Virtual Machine (JVM) is an example of one such runtime environment. JVMs enable a VM to execute one or more server applications independent of the underlying system.
However, for multiple VMs utilized in a large-scale Java application server deployment, the cost of ownership and of maintaining each Java application server, including the traditional guest operating system (OS) running on each VM, may be costly. For example, a typical Java server application requires installation and configuration at a minimum of three levels: guest operating system, JVM/application server, and application. The guest OS not only needs to be installed, patched, and maintained over time, but must be configured with file system, network, and memory settings suitable for running a JVM. For example, memory-intensive applications such as JVMs may operate more efficiently when using guest virtual memory pages of large sizes due to a reduced number of page table lookups needed during execution. As such, a system administrator has to configure the guest OS prior to boot time to enable large-page support at the kernel level. The system administrator may specify further settings, such as the size of each large page, the number of large pages to be used, whether large-pages are reserved in a shared memory region, etc. Security policies in a company may also require considerable configuration of user accounts and network accesses. Additionally, each new VM running an operating system may need to be manually configured with an appropriate network ID (e.g., MAC and/or IP address). Finally, the JVM and application server running thereon need to be configured in a way that is compatible with the setup of the guest system. For example, the guest system may have processors that support memory pages of large sizes (e.g., a large page size of 2MB, in addition to small 4 KB pages) and have large translation lookaside buffers (TLBs) in memory. In another example, the guest system may have a 32-bit or 64-bit based architecture which has requirements in process execution, memory address limitations, etc.